package com.danciyixue.boot.dcyx.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.danciyixue.boot.dcyx.model.entity.TestRecords;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.danciyixue.boot.dcyx.model.query.TestRecordsQuery;
import com.danciyixue.boot.dcyx.model.vo.TestRecordsVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 测试结果记录Mapper接口
 *
 * @author youlaitech
 * @since 2025-06-15 16:31
 */
@Mapper
public interface TestRecordsMapper extends BaseMapper<TestRecords> {

    /**
     * 获取测试结果记录分页数据
     *
     * @param page 分页对象
     * @param queryParams 查询参数
     * @return {@link Page<TestRecordsVO>} 测试结果记录分页列表
     */
    Page<TestRecordsVO> getTestRecordsPage(Page<TestRecordsVO> page, TestRecordsQuery queryParams);

    /**
     * 根据用户ID和教材ID查询测试记录
     *
     * @param userId 用户ID
     * @param programId 教材ID
     * @param type 测试类型
     * @return 测试记录
     */
    TestRecords findByUserIdAndProgramIdAndType(Long userId, Long programId, Integer type);

    /**
     * 根据用户ID和教材ID查询测试记录VO
     *
     * @param userId 用户ID
     * @param programId 教材ID
     * @param type 测试类型
     * @return 测试记录VO
     */
    TestRecordsVO findTestRecordsVOByUserIdAndProgramIdAndType(Long userId, Long programId, Integer type);

    /**
     * 根据用户ID和测试ID查询测试记录
     *
     * @param userId 用户ID
     * @param testId 测试ID
     * @return 测试记录
     */
    TestRecords findByUserIdAndTestId(Long userId, String testId);

    /**
     * 根据用户ID和教材ID查询测试记录列表
     *
     * @param userId 用户ID
     * @param programId 教材ID
     * @return 测试记录列表
     */
    List<TestRecordsVO> findTestRecordsByUserIdAndProgramId(Long userId, Long programId);

    /**
     * 根据用户ID和单元ID列表查询测试记录列表
     *
     * @param userId 用户ID
     * @param unitIds 单元ID列表
     * @return 测试记录列表
     */
    List<TestRecordsVO> findTestRecordsByUserIdAndUnitIds(@Param("userId") Long userId, @Param("unitIds") List<Long> unitIds);

}
